#include "common.cpp"

int main()
{
    cout << "\nWelcome to wp3000.\n" << endl;

	int n = 8;  // n sono il numero degli AS
	n++;        // incremento n di uno per non usare l'indice zero di vettori e matrici

    Simulator simulatore(n);

    simulatore.physicalConfig(); // Istanzio la rete fisica inserita nel file di configurazione
    simulatore.printASs();
    simulatore.printPhysicalNet();

    // istanzio la rete logica
    simulatore.calculateLogicalNet();
    simulatore.printLogicalNet();
    simulatore.printASPaths();

    simulatore.trafficConfig(); // Istanzio il traffico inserito nel file di configurazione
    simulatore.printTraffics();

    //simulatore.deleteTraffic(1, 2, "web");

    //cout << "tolate traffico passante per 1-8: " << simulatore.getBandwidthUsageLink(1, 8) <<endl<<endl;

    simulatore.checkBandwidth();
    //simulatore.addTraffic(3, 8, "web", 10);
    //simulatore.checkBandwidth();
    //simulatore.removeTraffic(3, 8, "web", 10);
    //simulatore.checkBandwidth();

    cout << "killo AS5" << endl << endl;
    simulatore.killAS(5);
    simulatore.printASs();
    simulatore.printPhysicalNet();
    simulatore.update();
    simulatore.printLogicalNet();
    simulatore.printASPaths();
    simulatore.printTraffics();
    simulatore.checkBandwidth();

    simulatore.saveConfig("netState2.xml");

    cout << "Avendo killato l'AS5, il traffico da AS3 ad AS4 è costretto a deviare per 3-1-8-4."<<endl;
    cout << "Si verifica così l'intasamento del link fisico AS1-AS3." << endl<<endl;
}
